//
//  HCLogMacros.h
//  HCLog
//
//  Created by 韩昌 on 2017/7/11.
//  Copyright © 2017年 Han Chang. All rights reserved.
//

#ifndef HCLogMacros_h
#define HCLogMacros_h

#include "HCLogConstants.h"

#ifndef HC_LOG_CONTEXT
#define HC_LOG_CONTEXT 0
#endif

#define HC_ASYNC_LOG(_flag_, _context_, _tag_, _format_, ...)                       \
    [[HCLogManager sharedInstance] asyncLogWithFlag: _flag_                         \
                                            context: _context_                      \
                                                tag: _tag_                          \
                                             format: (_format_), ## __VA_ARGS__]

#define HC_SYNC_LOG(_flag_, _context_, _tag_, _format_, ...)                        \
    [[HCLogManager sharedInstance] logWithFlag: _flag_                              \
                                       context: _context_                           \
                                           tag: _tag_                               \
                                        format: (_format_), ## __VA_ARGS__]


#define HCLogError(frmt, ...)    HC_SYNC_LOG(HCLogFlagError,   HC_LOG_CONTEXT, nil, frmt, ##__VA_ARGS__)
#define HCLogWarn(frmt, ...)    HC_ASYNC_LOG(HCLogFlagWarning, HC_LOG_CONTEXT, nil, frmt, ##__VA_ARGS__)
#define HCLogInfo(frmt, ...)    HC_ASYNC_LOG(HCLogFlagInfo,    HC_LOG_CONTEXT, nil, frmt, ##__VA_ARGS__)
#define HCLogDebug(frmt, ...)   HC_ASYNC_LOG(HCLogFlagDebug,   HC_LOG_CONTEXT, nil, frmt, ##__VA_ARGS__)
#define HCLogVerbose(frmt, ...) HC_ASYNC_LOG(HCLogFlagVerbose, HC_LOG_CONTEXT, nil, frmt, ##__VA_ARGS__)


#define HCLogTagError(tag, frmt, ...)    HC_SYNC_LOG(HCLogFlagError,   HC_LOG_CONTEXT, tag, frmt, ##__VA_ARGS__)
#define HCLogTagWarn(tag, frmt, ...)    HC_ASYNC_LOG(HCLogFlagWarning, HC_LOG_CONTEXT, tag, frmt, ##__VA_ARGS__)
#define HCLogTagInfo(tag, frmt, ...)    HC_ASYNC_LOG(HCLogFlagInfo,    HC_LOG_CONTEXT, tag, frmt, ##__VA_ARGS__)
#define HCLogTagDebug(tag, frmt, ...)   HC_ASYNC_LOG(HCLogFlagDebug,   HC_LOG_CONTEXT, tag, frmt, ##__VA_ARGS__)
#define HCLogTagVerbose(tag, frmt, ...) HC_ASYNC_LOG(HCLogFlagVerbose, HC_LOG_CONTEXT, tag, frmt, ##__VA_ARGS__)

#endif /* HCLogMacros_h */
